Here is a quick exploration of the temporal trends in call volume when grouped by complaint type.
We start with a function just to make it easier to manually select different sets of complaints to view.
## Function to plot subset of complaints in a faceted plot
plot_complaint_volume <- function(data, vars) {
plot_data <- data %>% filter(incident_complaint_reported_by_dispatch %in% vars) %>%
mutate(mo_yr = dmy(paste0("01-", mo, "-", yr))) %>%
group_by(mo_yr, incident_complaint_reported_by_dispatch) %>%
count()
cbPalette <- c("#E69F00", "#56B4E9", "#009E73", "#CC79A7", "#F0E442", "#0072B2", "#D55E00")
p <- ggplot(plot_data) +
geom_line(aes(x = mo_yr, y = n, color = incident_complaint_reported_by_dispatch), alpha = 1) +
geom_point(aes(x = mo_yr, y = n, color = incident_complaint_reported_by_dispatch), alpha = 0.7) +
geom_vline(xintercept = dmy("02-01-2020"), linetype = "dashed", alpha = 0.8) +
scale_color_manual(values = cbPalette) +
facet_wrap(~incident_complaint_reported_by_dispatch, ncol = 1) +
labs(x = "Date", y = "Monthly Incidents", color = "Complaint")
return(p)
}
For now, let's look at the top 3 complaints by frequency (breathing problems, sick person, and falls).
## View top 3 complaints
top_complaints <- ems_full %>%
group_by(incident_complaint_reported_by_dispatch) %>%
summarize(n = n()) %>%
top_n(3, n)
complaints <- top_complaints$incident_complaint_reported_by_dispatch
## Plot
plot_complaint_volume(ems_full, vars = complaints) +
labs(title = "Trends in Top 3 Complaints: Charlottesville") +
theme(plot.title = element_text(hjust = 0.5), legend.position = "none")
Plotting without faceting quickly gets too busy, but converting to an interactive layout with plotly can help with this by allowing for highlighting. Here are the top 8 complaints plotted together for better comparison.
#vars <- complaints
top_complaints <- ems_full %>%
group_by(incident_complaint_reported_by_dispatch) %>%
summarize(n = n()) %>%
top_n(8, n)
vars <- top_complaints$incident_complaint_reported_by_dispatch
plot_data <- ems_full %>% filter(incident_complaint_reported_by_dispatch %in% vars) %>%
mutate(mo_yr = dmy(paste0("01-", mo, "-", yr))) %>%
group_by(mo_yr, incident_complaint_reported_by_dispatch) %>%
count()
# cbPalette <- c("#E69F00", "#56B4E9", "#009E73", "#CC79A7", "#F0E442", "#0072B2", "#D55E00")
## Key to tell plotly what variable to highlight by
key <- highlight_key(plot_data, ~incident_complaint_reported_by_dispatch)
## Create ggplot
plt <- ggplot(key, aes(text = paste('Complaint', incident_complaint_reported_by_dispatch, sep = ": "))) +
geom_line(aes(x = mo_yr, y = n, color = incident_complaint_reported_by_dispatch), alpha = 1) +
#geom_point(aes(x = mo_yr, y = n), alpha = 0.7) +
geom_vline(xintercept = dmy("02-01-2020"), linetype = "dashed", alpha = 0.8) +
scale_color_brewer(palette = "Set2") +
labs(title = "Call Volume by Reported Complaint", x = "Date", y = "Incidents per month") +
theme_classic() +
theme(plot.title = element_text(hjust = 0.5))
## Convert to plotly and set highlight options
plt_highlight <- ggplotly(plt, tooltip = c("text")) %>%
highlight(on = "plotly_hover", off = "plotly_doubleclick") %>%
layout(showlegend = FALSE)
plt_highlight